home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / macver.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  5KB  |  171 lines

  1. /* WIDE AREA INFORMATION SERVER SOFTWARE:
  2.    No guarantees or restrictions.  See the readme file for the full standard
  3.    disclaimer.
  4.  
  5.    Brewster@think.com
  6. */
  7.  
  8. /* Change log:
  9.  * $Log:    macver.c,v $
  10.  * Revision 1.2  92/02/12  13:36:08  jonathan
  11.  * Added "$Log: $" so RCS will put the log message in the header
  12.  * 
  13. */
  14.  
  15. #include "irverify.h"
  16. #include "panic.h"
  17. #include "irfiles.h"
  18.  
  19. /*----------------------------------------------------------------------*/
  20. /* Class definitions */
  21.  
  22. #include <CApplication.h>
  23. #include <CFile.h>
  24. #include <CView.h>
  25. #include <CWindow.h>
  26. #include <CDesktop.h>
  27. #include <CDirector.h>
  28. #include "CDynamicError.h"
  29.  
  30. extern    CApplication    *gApplication;
  31.  
  32. struct CVerifyApp : CApplication 
  33. {
  34.   void    IVerifyApp(void);
  35. };
  36.  
  37. void CVerifyApp::IVerifyApp(void)
  38. {
  39.   CApplication::IApplication(4, 20480L, 2048L);
  40.   gError->Dispose(); /* get rid if the CError that IApplication defined */
  41.   gError = new(CDynamicError); /* make our own error handler */
  42. }
  43.  
  44. /*----------------------------------------------------------------------*/
  45. /* Gets a full filename from the mac file objects.
  46.  * getwd was taken from utils.c from the 
  47.  * document retrieval system.
  48.  */
  49.  
  50. #include <HFS.H>
  51. #include <string.h>
  52. /* for file manipulation routines */
  53. typedef enum file_style {MAC_FILE_STYLE, UNIX_FILE_STYLE} file_style;
  54. #include <FileMgr.h>
  55.  
  56. static char 
  57. *getwd(file_style style)
  58. /* This function returns the unix style path name which is set by any of the SF
  59.    routines (using the global vars).  The code is from the net, I have no idea
  60.    who the author might be.  He/She does include the following note:
  61.    
  62.           Note that it is perfectly legal for a Macintosh owner to create a
  63.         directory hierarchy where the length of full path names of the deepest
  64.         files exceeds 255 bytes; since the file system never manipulates full
  65.         pathnames internally (it only ever sees them when passed as parameters),
  66.         it doesn't and needn't check.  However, this poses an ethical problem if
  67.         you are constructing full pathnames: my code simply bombs if it would
  68.         construct a pathname >255 bytes, and if I increased the buffer size, the
  69.         resulting pathnames are useless except for documentation purposes (since
  70.         the file system can't have string parameters >255 bytes).
  71.  */
  72. {
  73.     CInfoPBRec d;
  74.     static char ret[255];
  75.     char nm[50], tmp[255];
  76.     long cur_dir = CurDirStore; /* mac global var */
  77.     long cur_vol = 0 - SFSaveDisk; /* mac global var */
  78.     
  79.     ret[0] = '\0';
  80.     d.dirInfo.ioDrDirID = cur_dir;
  81.     for(;;) {
  82.         d.dirInfo.ioCompletion = 0;
  83.         d.dirInfo.ioNamePtr = (StringPtr) nm;
  84.         d.dirInfo.ioVRefNum = cur_vol;
  85.         d.dirInfo.ioFDirIndex = -1;
  86.  
  87.         PBGetCatInfo(&d,0);
  88. /*        if(d.ioResult != noErr) return(0); this is not defined in lightspeed's headers */
  89.         PtoCstr((char *) nm);
  90.         strcpy(tmp,ret);
  91.         if (style == UNIX_FILE_STYLE)
  92.           strcpy(ret,"/");
  93.         else 
  94.           strcpy(ret,":");
  95.         strcat(ret,nm);
  96.         strcat(ret,tmp);
  97.         if(d.dirInfo.ioDrDirID == 2) break;    /* home directory */
  98.         d.dirInfo.ioDrDirID = d.dirInfo.ioDrParID;
  99.     } 
  100.     /* if its MAC style, remove the leading colon */
  101.     if (style == MAC_FILE_STYLE)
  102.       return(ret+1);
  103.     else
  104.       return(ret);
  105. }
  106.  
  107. /*----------------------------------------------------------------------*/
  108. /* Gets a filename from the user (one that exists already) */
  109.  
  110. static boolean 
  111. get_filename(char* prompt, char *filename)
  112. {
  113.    SFReply    macSFReply;
  114.    Point pos;
  115.    pos.h = pos.v = 100;
  116.    CtoPstr(prompt);
  117.    SFGetFile(pos, (StringPtr)prompt, 
  118.              NULL, -1, NULL, NULL, &macSFReply);
  119.    PtoCstr(prompt);
  120.    if(macSFReply.good)
  121.     { /* then we have a gotten a good file.
  122.        * put together the full filename
  123.        */
  124.          
  125.       strcpy(filename, getwd(MAC_FILE_STYLE));
  126.       strcat(filename, ":");
  127.       PtoCstr((char *)macSFReply.fName);
  128.       strcat(filename, (char *)macSFReply.fName);
  129.       CtoPstr((char *)macSFReply.fName);
  130.       return(true);
  131.      }
  132.     else
  133.       return(false);
  134. }
  135.  
  136. /*----------------------------------------------------------------------*/
  137.  
  138. FILE *logfile = NULL;
  139.  
  140. void
  141. main()
  142. {
  143.   char index_filename[MAX_FILE_NAME_LEN + 1]; 
  144.   database* db = NULL;
  145.  
  146. freopen("stdout","w",stdout);
  147.  
  148.   gApplication = new(CVerifyApp);
  149.   ((CVerifyApp *)gApplication)->IVerifyApp();
  150.   
  151.   if(get_filename("Index to verify:",index_filename) == false)
  152.     return;
  153.     
  154.   *(strrchr(index_filename,'.')) = '\0'; 
  155.   printf("verifying:  %s\n",index_filename);
  156.     
  157.   db = openDatabase(index_filename,false,true);
  158.   if (db == NULL)
  159.     panic("unable to open the database\n");
  160.     
  161.   print_dictionary(db);
  162.   printf("\n\n---------------------------------------------------------\n\n");
  163.   printIndex(db);
  164.   printf("\n\n---------------------------------------------------------\n\n");
  165.   printIndexUsingDictionary(db);
  166.   
  167.   closeDatabase(db);
  168. }
  169.  
  170. /*----------------------------------------------------------------------*/
  171.